home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 001-010 / amok07 / stack / stack.dok < prev    next >
Encoding:
Text File  |  1993-11-04  |  5.3 KB  |  207 lines

  1.                          S t a c k
  2.                          =========
  3.  
  4. Dokumentation zum Modul Stack
  5.  
  6. Autor: Michael Frieß [mif]
  7.        Kernerstr. 22a
  8.        7000 Stuttgart 1
  9.  
  10.  
  11. Kopierrechte
  12. ------------
  13.  
  14. (C) Copyright 1988 by Michael Frieß. Alle Rechte vorbehalten.
  15.  
  16. Das gesamte Paket (näheres siehe Kapitel "Paket") ist Public Domain.
  17. Alles (Quelltexte, Dokumentation und Code) kann beliebig
  18. weitergegeben werden, so lange mein Name und die Bemerkungen über
  19. Kopierrechte in den einzelnen Dateien unverändert bleiben.
  20. Es ist nur der nicht-kommerzielle Gebrauch erlaubt, d.h. auch der
  21. Verkauf ist nicht erlaubt.
  22. Nicht erlaubt ist die kommerzielle Verwendung des Paketes oder von
  23. Teilen ohne meine explizite, schriftliche Erlaubnis. Um sie zu
  24. erhalten, nehmen Sie bitte unter der o.a. Adresse Kontakt mit mir
  25. auf.
  26.  
  27.  
  28. Inhaltsverzeichnis
  29. ------------------
  30.  
  31.  Paket
  32.  Einleitung
  33.  Datentyp "Stack"
  34.  Stack-Operatoren
  35.  Beispiel
  36.  Weitere generische Datentypen
  37.  Literaturverzeichnis
  38.  
  39.  
  40. Paket
  41. -----
  42.  
  43. Das gesamte Paket "Stack" besteht aus folgenden Dateien:
  44.  
  45.   Stack.doc        Englische Dokumentation (für alle Nichtdeutschen)
  46.   Stack.dok        Diese Dokumentation
  47.   Stack.def        Definitionsmodul
  48.   Stack.mod        Implementationsmodul
  49.   Stack.sym        Symboldatei
  50.   Stack.obj        Compilierter Objektcode
  51.   TestOfStack.mod  Testprogramm (Quelltext)
  52.   TestOfStack      Testprogramm (ausführbar)
  53.  
  54.  
  55. Einleitung
  56. ----------
  57.  
  58. Modula-II bietet einige wenige grundlegende Datenstrukturen und die
  59. Möglichkeit umfangreichere Strukturen zu konstruieren. Es unterstützt
  60. auch die Entwicklung generischer Datentypen. Das beste Beispiel hierfür
  61. ist der Typ "File", der nicht wie in Pascal zum Sprachumfang gehört,
  62. sondern aus dem Modul "FileSystem" importiert wird. Die auf diesen Typ
  63. ausführbaren Operationen werden in dem gleichen Modul angeboten.
  64. Das einzige, was der Kunde dieses Moduls wissen braucht, ist das
  65. abstrakte Konzept von Files.
  66. Das Modul "Stack" stellt nun den generischen Datentyp Stapel
  67. bereit. Sie brauchen nicht mehr jedesmal, wenn sie eine Stapel
  68. benötigen, Sich mit Zeigern herumschlagen, Sie müssen nur das
  69. dahinter stehende Konzept kennen.
  70.  
  71.  
  72. Datentyp "Stack"
  73. ---------------
  74.  
  75. Der generische Datentyp "Stack" ist eine einfache LIFO-Liste
  76. (Last-In-First-Out). Das letzte Element, das auf den Stapel
  77. gelegt wird, wird als erstes abgearbeitet, wie zum Beispiel
  78. bei einem Stapel von Tellern.
  79.  
  80.  
  81. Stack-Operatoren
  82. ---------------
  83.  
  84. Im folgenden sind die möglichen Operationen und ihre abstrakte
  85. Bedeutung aufgeführt. Nähere Einzelheiten können dem
  86. Definitionsmodul entnommen werden.
  87.  
  88. o Init
  89.   Initialisiert einen neuen, leeren Stapel für die weitere
  90.   Verwendung.
  91.  
  92. o Discard
  93.   Löscht einen Stapel und gibt den benötigten Speicherplatz
  94.   zurück.
  95.  
  96. o Write
  97.   legt ein neues Element auf dem Stapel ab.
  98.  
  99. o Read
  100.   liefert das oberste Element auf dem Stapel und entfernt es
  101.   vom Stapel.
  102.  
  103. o Empty
  104.   stellt fest, ob der Stapel leer ist.
  105.  
  106.  
  107. Beispiel
  108. --------
  109.  
  110. Die Verwendung ist denkbar einfach:
  111.  
  112. 1) Importiere den Typ und die benötigten Operatoren:
  113.  
  114.    FROM Stack IMPORT stack, Init, Read, Write, Empty, Discard;
  115.  
  116. 2) Definiere den Elementtyp:
  117.    (zum Beispiel:)
  118.  
  119.    TYPE name = ARRAY [1..30] OF CHAR;
  120.  
  121. 3) Definiere eine Variable für den Stapel und eine Variable, die
  122.    die Daten eines Elementes enthält:
  123.  
  124.    VAR s       : stack;
  125.        Name    : name;
  126.  
  127. 4) Initialisiere den Stapel:
  128.  
  129.    Init (s);
  130.  
  131.    (oder mit qualifiziertem Import:)
  132.  
  133.    Stack.Init (s);
  134.  
  135. 5) Lege das erste Datum auf dem Stapel ab:
  136.  
  137.    Name    := "Kant";
  138.    Write (s, Name);
  139.  
  140.    weitere Daten können zum Beispiel durch Einlesen von einem File
  141.    oder durch Benutzereingabe eingefügt werden.
  142.  
  143. 6) Hole das oberste Element des Stapels:
  144.  
  145.    Read (s);
  146.  
  147. 7) Hole alle Elemente vom Stapel:
  148.  
  149.    WHILE NOT Empty (s) DO
  150.     Read (s, Name);
  151.     - Display Name -
  152.    END;
  153.  
  154. 8) Lösche den Stapel nach Gebrauch:
  155.  
  156.    Discard (s);
  157.  
  158.  
  159. Einfach, oder?
  160.  
  161.  
  162. Weitere generische Datentypen
  163. -----------------------------
  164.  
  165. Ich habe weitere Datentypen entwickelt:
  166.  
  167.   o queue
  168.     eine einfache FIFO-Liste
  169.  
  170.   o list
  171.     eine erweiterte lineare Liste
  172.  
  173.   o AVL-Tree
  174.     Eine nähere Beschreibung kann [1] entnommen werden.
  175.  
  176. Es gibt aber sicher eine Menge anderer sinnvoller Datentypen:
  177.  
  178.   o pipe
  179.     Es gibt einen Pipe-Handler auf irgendeiner FishDisk.
  180.     Die Realisation eines Pipe-Handlers mit voller Unterstützung
  181.     als generischer Datentyp in Modula-II wäre interessant.
  182.     Der große Vorteil von Pipes ist meiner Meinung nach der
  183.     simultane Gebrauch durch mehrere Prozesse. So können zum
  184.     Beispiel zwei Prozesse Daten liefern, während gleichzeitig
  185.     ein Prozess die Daten ausliest.
  186.     (Ich warte schon sehnsüchtig auf ein Modul, das im Gegensatz
  187.     zum Modul CoRoutines die Möglichkeiten des multitasking-fähigen
  188.     Betriebssystem vom Amiga voll ausnützt.
  189.  
  190.   o BTree
  191.     Eine andere Variante von Bäumen (siehe auch [1]).
  192.  
  193.   o Hash-Table
  194.     Vielleicht ist eine Hash-Tabelle auch ein möglicher generischer
  195.     Datentyp. Ich habe mir darüber noch keine Gedanken gemacht.
  196.  
  197. Ich freue mich schon auf eine Menge neuer generischer Datentypen.
  198. Wer seine Module weitergeben möchte, kann eine Diskette an meine
  199. Adresse oder die eines anderen AMOK-Mitglied schicken. Wir werden
  200. sie bestimmt in die nächste AMOK-Diskette aufnehmen.
  201.  
  202. Literaturverzeichnis
  203. --------------------
  204.  
  205. [1] N.Wirth "Algorithmen und Datenstrukturen mit Modula-II"
  206.     Teubner, Stuttgart 1986
  207.